import WxRequest from "./request"
import { getStorage, removeStorage, clearStorage } from "./storage"
import { modal, toast } from "./extendApi"
import { env } from "./env"

const instance = new WxRequest({
    baseURL: env.baseURL,
    timeout: 1500,
    // isLoading: false
})

// 配置请求拦截器
instance.interceptors.request = (config) => {
    // 在请求发送之前做点什么...
    // 在发送请求之前，先判断本地是否存在访问令牌 token
    const token = getStorage('token')
    // 如果存在同肯，就需要在请求头中添加 token 字段
    if (token) {
        config.header['token'] = token
    }

    return config
}

// 配置响应拦截器
instance.interceptors.response = async (response) => {
    // 从 response 中解构 isSuccess
    const { isSuccess, data } = response

    // 如果 isSuccess 为 false, 说明执行了 fail 回调函数
    // 这时候就说明网络异常，需要给用户提示网络异常
    if (!isSuccess) {
        wx.showToast({
          title: '网络异常请重试',
          icon: "error"
        })
        return response
    }

    // 判断服务器响应的业务状态码
    switch(data.code) {
        // 如果后端返回的业务状态码等于200，说明请求成功，服务器成功响应了数据
        case 200:
        case 0:
            return data
        // 如果返回的业务状态码等于401，208，说明 没有token或者token失效
        case 401:
        case 208:
            const res = await modal({
                content:"鉴权失败，请重新登录",
                showCancel: false,  // 不显示取消按钮
            })
            if (res) {
                // 清除之前失效的token，同时要清除本地存储的全部信息
                clearStorage()

                wx.navigateTo({
                  url: '/pages/login/login',
                })
            }
            return Promise.reject(response)
        default:
            toast({
                title: "程序出现异常，请联系客服或稍后重试"
            })
            return Promise.reject(response)
    }
}

export default instance